package com.tarry.sort;

import java.util.Arrays;

/**
 *  选择排序 <br>
 *  (1) 选择排序是原地排序算法 <br>
 *  (2) 选择排序是不稳定排序算法 <br>
 *  最好时间复杂度、最坏时间复杂度、平均时间复杂度均为O(n*n) <br>
 */
public class SelectionSort {

    public static void main(String[] args) {
        int[] arrays = new int[]{3,7,5,6,4,2};
        SelectionSort.sort(arrays);
        System.out.printf("排序结果\n");
        System.out.println(Arrays.toString(arrays));
    }

    public static void sort(int[] arrays) {
        if (arrays.length <=0) {
            return ;
        }
        /**
         *  找到最小值，放在已排序区间的末尾, 区间 0～i部分已经完全有序
         */
        for (int i = 0; i < arrays.length - 1; i++) {
            int minPoint = i;
            for (int j = i; j < arrays.length; j++) {
                if (arrays[j] < arrays[minPoint]) {
                    minPoint = j;
                }
            }
            int tmp = arrays[i];
            arrays[i] = arrays[minPoint];
            arrays[minPoint] = tmp;
        }
    }

    public static void print(int[] arrays){
        for (int array : arrays) {
            System.out.printf("%d ", array);
        }
        System.out.printf("\n");
    }
}
